<?php
require_once $_SERVER['DOCUMENT_ROOT'].'/actions/qualitydepartmentemployee/QualityDepartmentEmployeeAction.php';
require_once $_SERVER['DOCUMENT_ROOT'].'/actions/Response.php';
require_once $_SERVER['DOCUMENT_ROOT'].'/model/Service/Service.php';
require_once $_SERVER['DOCUMENT_ROOT'].'/entities/Indicator.php';
require_once $_SERVER['DOCUMENT_ROOT'].'/const/Error.php';
require_once $_SERVER['DOCUMENT_ROOT'].'/model/Service/ServiceFactory.php';

final class IndicatorEditAction extends QualityDepartmentEmployeeAction {
	
	protected function execute(Response $response) {
		$idIndicator = null;

		// параметр сессии мог быть определен только в слючае действия Update показатель 
		if(isset($_SESSION['id_indicator'])) {
			$idIndicator = $_SESSION['id_indicator'];
			unset($_SESSION['id_indicator']);
		}
		
		// если мы пришли со страницы editing/process/edit
		// выбрав из списка показатель, который надо редактировать
		if(isset($_POST['id_indicator'])) {
			$idIndicator = $_POST['id_indicator'];
		}
		
		
		// если показатель есть 'вытягиваем его для редактирования'
		if($idIndicator !== null) {
			
			// 'вытягиваем' показатель по его идентификатору
			$serviceFactory = new ServiceFactory();
			$indicatorService = $serviceFactory->getService('IndicatorService');
			$indicator = $indicatorService->read($idIndicator);
			
			$serviceProcess = $serviceFactoy->getService('ProcessService');
			$process = $serviceProcess->read($indicator->getProcess()->getIdentity());
			$indicator->setProcess($process);
			
			//устанавливаем параметр сессии - id_process,
			// чтобы потом можно было вернуться именно на процесс этого показателя
			// если пользователь захочет перейти по гиперссылке в 'хлебных крошках'
			$_SESSION['id_process'] = $indicator->getProcess()->getIdentity();
			
			$response->setParameter('indicator', $indicator);
			
			// отдадим процесс. А из него можно вытянуть 
			// возможные родительские показатели
			$response->setParameter('process', $indicator->getProcess());
			
			
			$responsibilityService = $serviceFactory->getService('ResponsibilityService');
			//Получаем количество Indicator в Responsibility
			$countIndicator = $responsibilityService->countIndicator($idIndicator);
			if ($countIndicator > 0)
			$response->setParameter('countIndicator', $countIndicator);
		} else {
		// если показателя нет, то это значит пользователь выбрал создание нового процесса
		// и тогда мы должны были прийти сюда со страницы editing/process/edit
		// выбрав новый показатель и передав данные о процессе
		
			if(isset($_POST['id_process'])) {
				$idProcess = $_POST['id_process'];
				//устанавливаем параметр сессии - id_process,
				// чтобы потом можно было вернуться именно на процесс этого показателя
				// если пользователь захочет перейти по гиперссылке в 'хлебных крошках'
				$_SESSION['id_process'] = $idProcess;
					
				$processService = $serviceFactory->getService('ProcessService');
				$process = $processService->read($idProcess);
				// нам в принципе от процесса нужно только имя
				// TODO: возможно нет необходимости передавать весь процесс	
				$response->setParameter('process', $process);
			} else {
				// ошибка - нам не пришел показатель и нам не пришел процесс
				// TODO: перенаправляем на список процессов
				$response->setActionPath('/editing/process/index');
			}
		}
		
		// собираем список единиц измерения
		$unitService = $serviceFactory->getService('UnitService');
		$units = $unitService->getAll();
		$response->setParameter('units', $units);
		
		// собираем список структурных подразделений - испольнителей
		$departmentService = $serviceFactory->getService('DepartmentService');
		$departments = $departmentService->getAll();
		$response->setParameter('departments', $departments);
		
		// собираем список типов структурных подразделений
		$departmentTypeService = $serviceFactory->getService('DepartmentTypeService');
		$departmentTypes = $departmentTypeService->getAll();
		$response->setParameter('departmentTypes', $departmentTypes);
	}
}
?>


